﻿using System.Collections.Generic;
using MIAP.Entidades;

namespace MIAP.DataAccess.Interfaces
{
    /// <summary>
    /// Clase de las operaciones de acceso a datos del módulo Perfiles Usuario.
    /// </summary>
    public interface IUsuarioPerfilDao
    {
        /// <summary>
        /// Obtiene todos los perfiles de un determinado usuario.
        /// </summary>
        /// <param name="idUsuario">Usuario del cual serán obtenidos los perfiles.</param>
        /// <returns>Lista con los perfiles del usuario.</returns>
        IList<PerfilInfo> GetPerfilesByUsuario(int idUsuario);

        /// <summary>
        /// Elimina un perfil relacionado con un usuario.
        /// </summary>
        /// <param name="idUsuario">Es el id del usuario al que se le eliminará el perfil.</param>
        /// <param name="idPerfil">Es el id del perfil que será eliminado.</param>
        void RemovePerfilesByUsuario(int idUsuario, int idPerfil);

        /// <summary>
        /// Obtiene todos los archivos relacionados con un proyecto.
        /// </summary>
        /// <param name="idProyecto">Es el id del proyecto para el cual estarán ralacionados los archivos.</param>
        /// <returns>Lista con los archivos relacionados al proyecto.</returns>
        IList<ArchivoInfo> GetArchivosByIdProyecto(int idProyecto);

        /// <summary>
        /// Agrega un nuevo perfil al usuario.
        /// </summary>
        /// <param name="usuario">Usuario que será agregado.</param>
        /// <param name="listArchivos">Lista de archivos sobre los cuales el usuario tendra </param>
        /// <param name="user">Usuario que ejecuta la operación.</param>
        void AddPerfilUsuario(UsuarioInfo usuario, List<ArchivoInfo> listArchivos, string user);

        /// <summary>
        /// Modifica la información del perfil del usuario.
        /// </summary>
        /// <param name="usuario">Usuario que será modificado.</param>
        /// <param name="listArchivos">Lista de archivos relacionados al usuario.</param>
        /// <param name="user">Usuario que ejecuta la operación.</param>
        void EditPerfilUsuario(UsuarioInfo usuario, List<ArchivoInfo> listArchivos, string user);

        /// <summary>
        /// Obtiene los archivos relacionados con el usuario.
        /// </summary>
        /// <param name="idUsuario">Id del usuario del cual se obtendrán los archivos.</param>
        /// <param name="idProyecto">Id del proyecto relacionado a los archivos.</param>        
        /// <returns>Lista con los archivos relacionados con el usuario</returns>
        List<ArchivoInfo> GetArchivosByUsuario(int idUsuario, int? idProyecto);

        /// <summary>
        /// Obtiene la información del perfil del usuario.
        /// </summary>
        /// <param name="idUsuario">Id del usuario del cual se obtendra la infrmación.</param>
        /// <param name="idPerfil">Id del perfil ralacionado al usuario.</param>
        /// <returns>Información del perfil del usuario.</returns>
        UsuarioInfo GetUsuarioPerfilById(int idUsuario, int idPerfil);

        
        /// <summary>
        /// Verifica la existencia del perfil para un usuario.
        /// </summary>
        /// <param name="idUsuario">Es el id del usuario.</param>
        /// <param name="idPerfil">Es el id del perfil relacionado con el usuario.</param>
        /// <returns>Indicador.</returns>
        bool VerifyExistencePerfilUsuario(int idUsuario, int idPerfil);
    }
}
